package auth

import (
	"time"
)

// LoginAttempt 登录尝试记录表模型
type LoginAttempt struct {
	ID             uint64    `gorm:"primary_key;auto_increment" json:"id"`
	Phone          string    `gorm:"type:varchar(20);index;comment:手机号" json:"phone"`
	ClientIP       string    `gorm:"type:varchar(45);index;comment:客户端IP" json:"client_ip"`
	AttemptType    int       `gorm:"type:tinyint;comment:尝试类型 1:验证码登录 2:密码登录" json:"attempt_type"`
	IsSuccess      bool      `gorm:"comment:是否成功" json:"is_success"`
	FailureReason  string    `gorm:"type:varchar(200);comment:失败原因" json:"failure_reason"`
	AttemptTime    time.Time `gorm:"autoCreateTime;comment:尝试时间" json:"attempt_time"`
	UserAgent      string    `gorm:"type:varchar(500);comment:用户代理" json:"user_agent"`
}

// TableName 指定表名
func (LoginAttempt) TableName() string {
	return "login_attempts"
}

// LoginAttemptType 登录尝试类型常量
const (
	LoginAttemptTypeSMS      = 1 // 验证码登录
	LoginAttemptTypePassword = 2 // 密码登录
)

// LoginLimit 登录限制表模型
type LoginLimit struct {
	ID           uint64    `gorm:"primary_key;auto_increment" json:"id"`
	Phone        string    `gorm:"type:varchar(20);uniqueIndex;comment:手机号" json:"phone"`
	FailureCount int       `gorm:"type:int;default:0;comment:失败次数" json:"failure_count"`
	LockExpTime  time.Time `gorm:"comment:锁定过期时间" json:"lock_exp_time"`
	LastFailTime time.Time `gorm:"comment:最后失败时间" json:"last_fail_time"`
	CreateTime   time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
	UpdateTime   time.Time `gorm:"autoUpdateTime;comment:更新时间" json:"update_time"`
}

// TableName 指定表名
func (LoginLimit) TableName() string {
	return "login_limits"
}

// 登录限制常量
const (
	MaxLoginFailures = 10              // 最大失败次数
	LockDuration     = 5 * time.Minute // 锁定时间5分钟
)